#pragma once

#include <map>
#include <string>
#include <boost/shared_ptr.hpp>

#include "../../Server/Physics/PhysicsLocale.h"

using namespace std;
using namespace Physics;

class CelestialObject //base class for large fixed objects like stars and planets
{
protected:
	string m_name;
	Vect3LL m_position; // 3x64bit integer used for precision
	PhysicsLocale m_physics; // container for aegia simulation

public:
	CelestialObject(string name, Vect3LL& p_position) { m_name = name; m_position = p_position;};
	~CelestialObject();
};

class Star : public CelestialObject
{
	Star();
	~Star();
};

class Moon : public CelestialObject
{
	Moon();
	~Moon();
};

class Planet : public CelestialObject
{

protected:
	std::map<long long, boost::shared_ptr<Moon>>  m_moons; 	

public:
	Planet();
	~Planet();
};

class StarSystem
{
private:

protected:

	std::map<long long, boost::shared_ptr<Star>>  m_stars; 	
	std::map<long long, boost::shared_ptr<Planet>> m_planets;

public:
	StarSystem(void);
	~StarSystem(void);
};
